import Config
import MyUtil
import os
import time
import threading


# 主动记录器
def active_recorder():
    try:
        # 获取当前日明细文件名称
        record_bucket_file_name = MyUtil.get_record_bucket_write_path(time.strftime('%Y%m%d'))
        # 确保文件夹路径存在
        os.makedirs(os.path.dirname(record_bucket_file_name), exist_ok=True)
        # 追加记录写入磁盘文件
        with open(record_bucket_file_name, 'a') as record_bucket_file:
            record_bucket_file.writelines(Config.WRITE_TO_RECORD_BUCKET_BUFFER)
        # 清空缓存列表
        Config.WRITE_TO_RECORD_BUCKET_BUFFER.clear()
    except Exception as e:
        MyUtil.loger(f"文件写入失败: {e}")


# 被动记录器
def passive_recorder():
    """
    定时把缓冲区数据写入文件并清理缓冲区(释放内存)
    子线程方法体执行完毕后会主动杀掉对应线程，无需手动杀进程
    """
    MyUtil.loger(f'被动记录器注册成功')
    while True:
        # 缓冲列表定期写入文件 每隔 Config.WRITE_TO_FILE_TIME 秒
        time.sleep(Config.WRITE_TO_FILE_TIME)
        if len(Config.WRITE_TO_RECORD_BUCKET_BUFFER) > 0:
            MyUtil.loger(f"定时写入记录触发，写入数量为{len(Config.WRITE_TO_RECORD_BUCKET_BUFFER)}")
            # 创建新线程写入文件，避免因写入文件阻塞导致主线程阻塞
            threading.Thread(target=active_recorder).start()
        else:
            MyUtil.loger(f"缓冲区为空，无需写入...")
